/*==============================================================================
 *
 *            这个demo用于展示可靠信号与非可靠信号的不同
 *   并体会阻塞接口sigprocmask(int how,sigset_t* set,sigset_t* oldset)的用法
 *
 *==============================================================================*/

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>

void sigcb(int signo)
{
  printf("receive a signal : %d\n",signo);
}


int main()
{
  signal(SIGINT,sigcb);             //非可靠信号     ctrl+c的信号
  signal(SIGRTMIN+4,sigcb);         //可靠信号

  sigset_t set;               //创建一个set集合
  sigemptyset(&set);          //清空set集合，防止未知数据造成混乱
  sigfillset(&set);           //将所有信号放入set集合

  sigprocmask(SIG_BLOCK,&set,NULL);      //阻塞set集合中的信号

  printf("please enter continue \n");
  getchar();                  //获取回车，获取不到就卡在这

  sigprocmask(SIG_UNBLOCK,&set,NULL);    //解除阻塞

  while(1){
    sleep(1);
  }
  return 0;
}
